import { buildModuleUrl } from '../../Source/Cesium.js';
import { defined } from '../../Source/Cesium.js';
import { Iau2006XysData } from '../../Source/Cesium.js';
import { Iau2006XysSample } from '../../Source/Cesium.js';
import pollToPromise from '../pollToPromise.js';

describe('Core/Iau2006XysData', function() {

    var xys;

    beforeEach(function() {
        xys = new Iau2006XysData();
    });

    it('returns undefined initially', function() {
        expect(xys.computeXysRadians(2442398, 1234.56)).toBeUndefined();
    });

    it('eventually returns an answer', function() {
        return pollToPromise(function() {
            return defined(xys.computeXysRadians(2442398, 1234.56));
        }).then(function() {
            // Once the data file has been downloaded, later requests
            // within the same chunk return an answer.
            expect(xys.computeXysRadians(2442399, 777.77)).toBeDefined();
        });
    });

    it('returns the same answer as STK Components', function() {
        var result;
        return pollToPromise(function() {
            result = xys.computeXysRadians(2442399, 777.77);
            return defined(result);
        }).then(function() {
            expect(result).toEqual(new Iau2006XysSample(
                -0.0024019733101066816,
                -0.000024843279494458311,
                -0.000000016941747917421229
            ));
        });
    });

    it('returns undefined prior to the XYS table epoch', function() {
        expect(xys.computeXysRadians(2442395, 0.0)).toBeUndefined();
    });

    it('returns undefined after the last XYS table sample', function() {
        expect(xys.computeXysRadians(2442396 + 27427, 0.0)).toBeUndefined();
    });

    it('allows configuring xysFileUrlTemplate', function() {
        xys = new Iau2006XysData({
            // this should be the same location as the default, but specifying the value
            // takes the code through a different code path.
            xysFileUrlTemplate: buildModuleUrl('Assets/IAU2006_XYS/IAU2006_XYS_{0}.json')
        });

        return pollToPromise(function() {
            return defined(xys.computeXysRadians(2442398, 1234.56));
        });
    });
});
